'use strict'

const http = require('http');

/*
.jpg .jpeg   =>  image/jepg
.png    =>   iamge/png
.gif    =>   image/gif
.ico    =>   image/x-ico
.txt    =>   text/plain
.json   =>   text/json 或 application/json
.xml    =>   text/xml  或 application/xml

*/


let html=`
    <!DOCTYPE html>
    <html>
        <head>
            <title>First HTTP</title>
        </head>
        <body>
            你好！
        </body>
    </html>
`

let routerTable = {
    '/':async(request,response)=>{
        response.setHeader('content-type',
                            'text/html;charset=utf-8')
        response.end(html)
    },

    '/test':async (request,response)=>{
        let status = parseInt(Math.random()*200) + 199
        response.statusCode = status
        response.end('test end')
    },
    
    '/data':async (request,response)=>{
        let bufferList = [];
        let bufferLength = 0;

        request.on('data',chunk=>{
            bufferLength += chunk.bufferLength
            bufferList.push(chunk)
        })

        let bodyData = null;
        request.on('end',()=>{
            if (bufferList.length > 0){
                bodyData = Buffer.concat(bufferList,bufferLength)
                bufferList = []
            }

            if (bodyData){
                response.end(bodyData)
            }else{
                response.end()
            }
        })
    }
}

http.createServer((request,response)=>{

    if(!routerTable[ request.url ]){
        response.statusCode = 404
        response.end('page not found')
        return
    }

    routerTable[ request.url ](request,response)


}).listen(3456);